<?php

/*
 Copyright (c) 2009 hamcrest.org
 */

/*
 * Generates the Hamcrest_Matchers factory class and factory functions
 * from the @factory doctags in the various matchers.
 */

define('GENERATOR_BASE', __DIR__);
define('HAMCREST_BASE',
    realpath(dirname(GENERATOR_BASE) . DIRECTORY_SEPARATOR . 'hamcrest'));

define('GLOBAL_FUNCTIONS_FILE',
    HAMCREST_BASE . DIRECTORY_SEPARATOR . 'Hamcrest.php');
define('STATIC_MATCHERS_FILE',
    HAMCREST_BASE
    . DIRECTORY_SEPARATOR . 'Hamcrest'
    . DIRECTORY_SEPARATOR . 'Matchers.php');

set_include_path(implode(PATH_SEPARATOR, array(
    GENERATOR_BASE,
    HAMCREST_BASE,
    get_include_path()
  )));

function __autoload($class) {
  $file = str_replace('_', '/', $class) . '.php';
  require_once $file;
}

@unlink(GLOBAL_FUNCTIONS_FILE);
@unlink(STATIC_MATCHERS_FILE);

$generator = new FactoryGenerator(HAMCREST_BASE . DIRECTORY_SEPARATOR . 'Hamcrest');
$generator->addFactoryFile(new StaticMethodFile(STATIC_MATCHERS_FILE));
$generator->addFactoryFile(new GlobalFunctionFile(GLOBAL_FUNCTIONS_FILE));
$generator->generate();
$generator->write();
